/*
 *  Scalar.h
 *  T3nsors
 *
 *  Created by Michael Barriault on 09-10-07.
 *  Copyright 2010 University of Guelph. All rights reserved.
 *
 */

#ifndef SCALAR_HEADER
#define SCALAR_HEADER

#include "Domain.h"
#include <string>
#include <sstream>

class Scalar {
private:
	std::vector<double> T;
public:
	std::string id;
	Domain O;
	Scalar(void);
	Scalar(Domain,std::string iid="");
	~Scalar(void);
	double& operator[](int);
	double& operator()(int,...);
//	int test(int,int,...);
};

Scalar operator-(Scalar);
Scalar operator+(Scalar, Scalar);
Scalar operator-(Scalar, Scalar);
Scalar operator*(Scalar, Scalar);
Scalar operator/(Scalar, Scalar);
Scalar operator^(Scalar, Scalar);
Scalar operator+(Scalar, double);
Scalar operator-(Scalar, double);
Scalar operator*(Scalar, double);
Scalar operator/(Scalar, double);
Scalar operator^(Scalar, double);
Scalar operator+(double, Scalar);
Scalar operator-(double, Scalar);
Scalar operator*(double, Scalar);
Scalar operator/(double, Scalar);
Scalar operator^(double, Scalar);
Scalar sin(Scalar);
Scalar cos(Scalar);
Scalar sin2(Scalar);
Scalar sqrt(Scalar);
double l2(Scalar,double p=2.);

#endif
